﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using EFong.Contract;

namespace EFong.ServicesInterface
{
    [ServiceContract]
    public interface IMasterService
    {
        [OperationContract]
        ServiceResult<List<Project>> GetAllProject();

        [OperationContract]
        ServiceResult<List<Project>> GetAllOtherProject();

        [OperationContract]
        ServiceResult NewProject(Project project);

        [OperationContract]
        ServiceResult UpdateProject(Project project);

        [OperationContract]
        ServiceResult UpdateProjectList(List<Project> projectList);

        [OperationContract]
        ServiceResult<List<BankAccount>> GetAllBankAccount();

        [OperationContract]
        ServiceResult NewBankAccount(BankAccount bankAccount);

        [OperationContract]
        ServiceResult UpdateBankAccount(BankAccount bankAccount);
        
        [OperationContract]
        ServiceResult UpdateBankAccounts(List<BankAccount> bankAccounts);

        [OperationContract]
        ServiceResult<List<RCustomer>> GetAllCustomer();

        [OperationContract]
        ServiceResult<List<RCustomer>> GetCustomerByName(string name);

        [OperationContract]
        ServiceResult<List<RCustomer>> GetCustomerByAddress(string address);

        [OperationContract]
        ServiceResult<List<RCustomer>> GetCustomerByTel(string tel);

        [OperationContract]
        ServiceResult<List<RCustomer>> GetCustomerBySalesman(User salesman);

        [OperationContract]
        ServiceResult<Customer> GetCustomerByID(Guid id);

        [OperationContract]
        ServiceResult<string> NewCustomer(Customer customer);

        [OperationContract]
        ServiceResult UpdateCustomer(Customer customer);

        [OperationContract]
        ServiceResult DeleteCustomer(Customer customer);

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllVendor();

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllHotelVendor();

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllTrainVendor();

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllFlightVendor();

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllInsuranceVendor();

        [OperationContract]
        ServiceResult<Vendor> GetVendorByID(Guid id);

        [OperationContract]
        ServiceResult<List<RVendor>> GetVendorByProject(Project project);

        [OperationContract]
        ServiceResult<string> NewVendor(Vendor vendor);

        [OperationContract]
        ServiceResult UpdateVendor(Vendor vendor);

        [OperationContract]
        ServiceResult<List<InsurancePolicy>> GetAllInsurancePolicy();

        [OperationContract]
        ServiceResult<List<InsurancePolicy>> GetAllAvailableInsurancePolicy();

        [OperationContract]
        ServiceResult NewInsurancePolicy(NewInsurancePolicy newInsurancePolicy);

        [OperationContract]
        ServiceResult UpdateInsurancePolicy(InsurancePolicy insurancePolicy);

        [OperationContract]
        ServiceResult<InsurancePolicy> GetAvailableInsurancePolicy(RVendor vendor, string type);

        [OperationContract]
        ServiceResult<List<string>> GetInsurancePolicyTypeList();

        [OperationContract]
        ServiceResult<InsurancePolicy> ReturnInsurancePolicy(InsurancePolicy oldInsurancePolicy, string newNr);

        [OperationContract]
        ServiceResult<List<JourneyOrder>> GetAllJourneyOrder();

        [OperationContract]
        ServiceResult<List<JourneyOrder>> GetAllAvailableJourneyOrder();

        [OperationContract]
        ServiceResult NewJourneyOrder(List<JourneyOrder> journeyOrderList);

        [OperationContract]
        ServiceResult UpdateJourneyOrder(JourneyOrder journeyOrder);

        [OperationContract]
        ServiceResult<JourneyOrder> ReturnJourneyOrder(JourneyOrder oldJourneyOrder, string newNr);

        [OperationContract]
        ServiceResult<JourneyOrder> GetAvailableJourneyOrder(string type);

        [OperationContract]
        ServiceResult<List<string>> GetJourneyOrderTypeList();

        [OperationContract]
        ServiceResult UpdateTourVendor(TourVendor tourVendor);

        [OperationContract]
        ServiceResult<List<RTourVendor>> GetAllTourVendor();

        [OperationContract]
        ServiceResult<List<RVendor>> GetAllTourpartyVendor();

        [OperationContract]
        ServiceResult<TourVendor> GetTourVendorByID(Guid id);

        [OperationContract]
        ServiceResult<List<SearchTour>> GetTourByName(string name);

        [OperationContract]
        ServiceResult<string> UpdateTouringParty(TouringParty touringParty);

        [OperationContract]
        ServiceResult<List<RTouringParty>> GetAllTouringParty();

        [OperationContract]
        ServiceResult<TouringParty> GetTouringPartyByID( Guid id);

        [OperationContract]
        ServiceResult VoidTouringParty(TouringParty touringParty, string cause);

        [OperationContract]
        Contract.ServiceResult<List<Contract.STour>> SearchTourByNameAndTravel(string name, string vendor, string type, string area, string feature, string travel);

        [OperationContract]
        ServiceResult<List<Contract.TourItemType>> GetTourItemTypeList();

        [OperationContract]
        ServiceResult UpdateTourItemTypeList(List<Contract.TourItemType> list);
    }
}
